﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Collections.Generic;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using GC2.Bussines;
using GC2.Bussines.BMAdmin;
using GC2.Entities.Admin;
using GC2.ExceptionHandler;
using GC2.Funciones.General;

public partial class Stock_LotesGestion : GenericPage
{
    #region Propiedades
    FunctionsSite funciones = new FunctionsSite();
    Lotes loteActual = new Lotes();
    private int Accion;
    #endregion

    #region Controles

    #region Page_Load
    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            SetearCultura();
            SetearConexion();
            if (!this.IsPostBack)
            {
                Accion = Convert.ToInt16(Session["Accion"].ToString());
                loteActual = (Lotes)Session["loteActual"];
                if (Accion > 1)
                {
                    HidrataControles();
                    if (Accion == 2)
                    {
                        lblAccion.Text = "Modifica Lote";
                    }
                    btnCerrar.Visible = true;
                    btnCerrar.Enabled = false;
                }
                else
                {
                    HidrataCabecera();

                    // es un alta de Lote
                    
                    txtSaldo.Text = "0";
                    txtCosto.Text = "0";
                    trDeprecia.Visible = false;
                    trArrastra.Visible = false;
                    btnCerrar.Visible = false;

                    lblAccion.Text = "Agrega Nuevo Lote";
                }
            }
        }
        catch (Exception ex)
        {
            ErrorUI(ex);
        }

    }
    #endregion

    #region btnCancelar_Click
    protected void btnCancelar_Click(object sender, EventArgs e)
    {
        Response.Redirect("~/Seguridad/Default.aspx", false);
    }
    #endregion

    #region rdbDeprecia_CheckedChanged
    protected void rdbDeprecia_CheckedChanged(object sender, EventArgs e)
    {
        try
        {
            if (rdbDeprecia.Checked)
            {
                rdbArrastra.Checked = false;
                lblAccion.Text = "Preparando Cierre de Lote: Deprecia Saldo";
                txtSaldo.ReadOnly = true;
                btnCerrar.Enabled = true;
                btnGuardar.Enabled = false;
            }
        }
        catch (Exception ex)
        {
            ErrorUI(ex);
        }
    }
    #endregion

    #region rdbArrastra_CheckedChanged
    protected void rdbArrastra_CheckedChanged(object sender, EventArgs e)
    {
        try
        {
            if (rdbArrastra.Checked)
            {
                rdbDeprecia.Checked = false;
                lblAccion.Text = "Preparando Cierre de Lote: Conserva Saldo";
                txtSaldo.ReadOnly = false;
                btnCerrar.Enabled = true;
                btnGuardar.Enabled = false;
            }
        }
        catch (Exception ex)
        {
            ErrorUI(ex);
        }
    }
    #endregion

    #region btnGuardar_Click
    protected void btnGuardar_Click(object sender, EventArgs e)
    {
        try
        {
            BMLotes bmLotes = new BMLotes(Connection);
            loteActual = (Lotes)Session["loteActual"];
            Accion = Convert.ToInt16(Session["Accion"].ToString());
            try
            {
                loteActual.FechaVto = FechaVto.GetFecha();
            }
            catch 
            {
                lblMensaje.Text = "Fecha Incorrecta.";
                mpeMensaje.Show();
                return;
            }

            if (funciones.isNumeric(txtSaldo.Text.Trim()))
            {
                decimal dSaldo = loteActual.Saldo;
                loteActual.Saldo = Convert.ToDecimal(txtSaldo.Text.Trim());
                if (Accion > 1)
                {
                    
                    if (dSaldo != loteActual.Saldo)
                    {
                        // Actualiza saldo Articulo
                        Stock stock = new Stock();
                        stock.Id_Rubro = loteActual.Id_Rubro;
                        stock.Id_SubRubro = loteActual.Id_SubRubro;
                        stock.Id_Articulo = loteActual.Id_Articulo;
                        BMStock bmStock = new BMStock(Connection);
                        stock = bmStock.BMStockGetOne(stock);
                        decimal dDiferencia = 0;
                        if (loteActual.Saldo > dSaldo)
                        {
                            dDiferencia = loteActual.Saldo - dSaldo;
                            stock.Saldo = dDiferencia * (- 1);
                        }
                        else
                        {
                            dDiferencia = dSaldo - loteActual.Saldo;
                            stock.Saldo = dDiferencia;
                        }
                        bmStock.BMStockUpdateSaldo(stock);
                        btnGuardar.Enabled = false;
                    }
                }
            }
            else
            {
                lblMensaje.Text = "Saldo Incorrecto.";
                mpeMensaje.Show();
                return;
            }

            if (funciones.isNumeric(txtCosto.Text.Trim()))
            {
                if (Accion > 1)
                {
                    loteActual.Costo = Convert.ToDecimal(txtCosto.Text.Trim());
                }
            }
            else
            {
                lblMensaje.Text = "Costo Incorrecto.";
                mpeMensaje.Show();
                return;
            }
            Session["loteActual"] = loteActual;

            
            if (Accion == 1)
            {
                loteActual.Estado = 1;
                Session["loteActual"] = loteActual;
                InsertarLote(); 
            }
            else
            {
                GuardarLote();
            }
        }
        catch (Exception ex)
        {
            ErrorUI(ex);
        }
    }
    #endregion

    #region btnCerrar_Click
    protected void btnCerrar_Click(object sender, EventArgs e)
    {
        try
        {
            BMLotes bmLotes = new BMLotes(Connection);
            loteActual = (Lotes)Session["loteActual"];
            try
            {
                loteActual.FechaVto = FechaVto.GetFecha();
            }
            catch
            {
                lblMensaje.Text = "Fecha Incorrecta.";
                mpeMensaje.Show();
                return;
            }

            if (funciones.isNumeric(txtSaldo.Text.Trim()))
            {
                loteActual.Saldo = Convert.ToDecimal(txtSaldo.Text.Trim());
            }
            else
            {
                lblMensaje.Text = "Saldo Incorrecto.";
                mpeMensaje.Show();
                return;
            }
            loteActual.Estado = 0;
            Session["loteActual"] = loteActual;

            if (rdbDeprecia.Checked)
            {
                BMStock bmStock = new BMStock(Connection);
                Stock stock = new Stock();
                stock.Id_Rubro = loteActual.Id_Rubro;
                stock.Id_SubRubro = loteActual.Id_SubRubro;
                stock.Id_Articulo = loteActual.Id_Articulo;
                stock.Saldo = loteActual.Saldo;
                bmStock.BMStockUpdateSaldo(stock);
                GuardarLote();
            }
            else
            {
                GuardarLote();
            }
            btnCerrar.Enabled = false;
            rdbDeprecia.Enabled = false;
            rdbArrastra.Enabled = false;
            btnGuardar.Enabled = false;
            lblAccion.Text = "Lote Cerrado.";
        }
        catch (Exception ex)
        {
            ErrorUI(ex);
        }
    }
    #endregion

    #region btnTraza_Click
    protected void btnTraza_Click(object sender, EventArgs e)
    {
        try
        {
            BMLotes bmLotes = new BMLotes(Connection);
            loteActual = (Lotes)Session["loteActual"];

            Response.Redirect("LotesTraza.aspx", false);
        }
        catch (Exception ex)
        {
            ErrorUI(ex);
        }
    }
    #endregion
       
    #endregion

    #region Metodos

    #region HidrataCabecera
    private void HidrataCabecera()
    {
        try
        {
            BMRubros bmRubro = new BMRubros(Connection);
            Rubros rubro = new Rubros();
            rubro.Id_Rubro = loteActual.Id_Rubro;
            rubro = bmRubro.BMRubrosSearch(rubro)[0];
            lblRubro.Text = "Rubro: " + rubro.Id_Rubro.ToString();
            txtRubro.Text = rubro.Rubro;

            BMSubRubros bmSubRubro = new BMSubRubros(Connection);
            SubRubros subRubro = new SubRubros();
            subRubro.Id_Rubro = loteActual.Id_Rubro;
            subRubro.Id_SubRubro = loteActual.Id_SubRubro;
            subRubro = bmSubRubro.BMSubRubrosSearch(subRubro)[0];
            lblSubRubro.Text = "SubRubro: " + subRubro.Id_SubRubro.ToString();
            txtSubRubro.Text = subRubro.SubRubro;

            txtCodigo.Text = loteActual.Id_Articulo.ToString();
            txtArticulo.Text = loteActual.Articulo.ToString();
        }
        catch (Exception ex)
        {
            ErrorUI(ex);
        }
    }
    #endregion

    #region HidrataControles
    private void HidrataControles()
    {
        try
        {
            HidrataCabecera();
            txtLote.Text = loteActual.Lote.ToString();
            if (loteActual.FechaVto > FechaNula)
            {
                FechaVto.SetFecha(loteActual.FechaVto);
            }
            decimal dSaldo = Math.Round(Convert.ToDecimal(loteActual.Saldo), 2);
            txtSaldo.Text = dSaldo.ToString();
            decimal dCosto = Math.Round(Convert.ToDecimal(loteActual.Costo), 2);
            txtCosto.Text = dCosto.ToString();
        }
        catch (Exception ex)
        {
            ErrorUI(ex);
        }
    }
    #endregion

    #region InsertarLote
    protected void InsertarLote()
    {
        try
        {
            BMLotes bmLotes = new BMLotes(Connection);
            loteActual = (Lotes)Session["loteActual"];

            loteActual.Lote = txtLote.Text.Trim();
            try
            {
                loteActual = bmLotes.BMLotesInsert(loteActual);
            }
            catch
            {
                lblAccion.Text = "No se pudo Agregar Nuevo Lote.";
                lblMensaje.Text = "Lote ya existe.";
                mpeMensaje.Show();
                return;
            }
            txtLote.Text = loteActual.Lote.ToString();
            lblAccion.Text = "Nuevo Lote Agregado";
            btnGuardar.Enabled = false;
        }
        catch (Exception ex)
        {
            ErrorUI(ex);
        }
    }
    #endregion

    #region GuardarLote
    protected void GuardarLote()
    {
        try
        {
            BMLotes bmLotes = new BMLotes(Connection);
            loteActual = (Lotes)Session["loteActual"];
            try
            {
                bmLotes.BMLotesUpdate(loteActual);
            }
            catch
            {
                lblAccion.Text = "No se pudo Actualizar Lote.";
                lblMensaje.Text = "Error de Lote.";
                mpeMensaje.Show();
                return;
            }
            lblAccion.Text = "Lote Actualizado";
        }
        catch (Exception ex)
        {
            ErrorUI(ex);
        }
    }
    #endregion

    #endregion
}
